<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
<meta name="generator" content="Doxygen 1.9.1"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>Doxygen: pcl::on_nurbs::FittingCylinder类 参考</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
<link href="navtree.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="resize.js"></script>
<script type="text/javascript" src="navtreedata.js"></script>
<script type="text/javascript" src="navtree.js"></script>
<link href="search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="search/searchdata.js"></script>
<script type="text/javascript" src="search/search.js"></script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
</head>
<body>
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
<div id="titlearea">
<table cellspacing="0" cellpadding="0">
 <tbody>
 <tr style="height: 56px;">
  <td id="projectalign" style="padding-left: 0.5em;">
   <div id="projectname">Doxygen
   </div>
  </td>
 </tr>
 </tbody>
</table>
</div>
<!-- end header part -->
<!-- 制作者 Doxygen 1.9.1 -->
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
var searchBox = new SearchBox("searchBox", "search",false,'搜索','.html');
/* @license-end */
</script>
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
$(function() {
  initMenu('',true,false,'search.php','搜索');
  $(document).ready(function() { init_search(); });
});
/* @license-end */</script>
<div id="main-nav"></div>
</div><!-- top -->
<div id="side-nav" class="ui-resizable side-nav-resizable">
  <div id="nav-tree">
    <div id="nav-tree-contents">
      <div id="nav-sync" class="sync"></div>
    </div>
  </div>
  <div id="splitbar" style="-moz-user-select:none;" 
       class="ui-resizable-handle">
  </div>
</div>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
$(document).ready(function(){initNavTree('classpcl_1_1on__nurbs_1_1_fitting_cylinder.html',''); initResizable(); });
/* @license-end */
</script>
<div id="doc-content">
<!-- window showing the filter options -->
<div id="MSearchSelectWindow"
     onmouseover="return searchBox.OnSearchSelectShow()"
     onmouseout="return searchBox.OnSearchSelectHide()"
     onkeydown="return searchBox.OnSearchSelectKey(event)">
</div>

<!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow">
<iframe src="javascript:void(0)" frameborder="0" 
        name="MSearchResults" id="MSearchResults">
</iframe>
</div>

<div class="header">
  <div class="summary">
<a href="#pub-methods">Public 成员函数</a> &#124;
<a href="#pub-static-methods">静态 Public 成员函数</a> &#124;
<a href="#pub-attribs">Public 属性</a> &#124;
<a href="#pro-methods">Protected 成员函数</a> &#124;
<a href="#pri-methods">Private 成员函数</a> &#124;
<a href="#pri-attribs">Private 属性</a> &#124;
<a href="classpcl_1_1on__nurbs_1_1_fitting_cylinder-members.html">所有成员列表</a>  </div>
  <div class="headertitle">
<div class="title">pcl::on_nurbs::FittingCylinder类 参考</div>  </div>
</div><!--header-->
<div class="contents">

<p>Fitting a cylindric (dim 0 clamped, dim 1 periodic) B-Spline surface to 3D point-clouds using point-distance-minimization Based on paper: TODO  
 <a href="classpcl_1_1on__nurbs_1_1_fitting_cylinder.html#details">更多...</a></p>

<p><code>#include &lt;<a class="el" href="fitting__cylinder__pdm_8h_source.html">fitting_cylinder_pdm.h</a>&gt;</code></p>
<table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-methods"></a>
Public 成员函数</h2></td></tr>
<tr class="memitem:a0691da5e90af528477c71034e768d521"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1on__nurbs_1_1_fitting_cylinder.html#a0691da5e90af528477c71034e768d521">FittingCylinder</a> (int order, <a class="el" href="structpcl_1_1on__nurbs_1_1_nurbs_data_surface.html">NurbsDataSurface</a> *data)</td></tr>
<tr class="memdesc:a0691da5e90af528477c71034e768d521"><td class="mdescLeft">&#160;</td><td class="mdescRight">Constructor initializing B-Spline surface using initNurbsPCACylinder(...).  <a href="classpcl_1_1on__nurbs_1_1_fitting_cylinder.html#a0691da5e90af528477c71034e768d521">更多...</a><br /></td></tr>
<tr class="separator:a0691da5e90af528477c71034e768d521"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a5fb73d3ecb5630bec5d28b4bdaef4c51"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1on__nurbs_1_1_fitting_cylinder.html#a5fb73d3ecb5630bec5d28b4bdaef4c51">FittingCylinder</a> (<a class="el" href="structpcl_1_1on__nurbs_1_1_nurbs_data_surface.html">NurbsDataSurface</a> *data, const <a class="el" href="class_o_n___nurbs_surface.html">ON_NurbsSurface</a> &amp;ns)</td></tr>
<tr class="memdesc:a5fb73d3ecb5630bec5d28b4bdaef4c51"><td class="mdescLeft">&#160;</td><td class="mdescRight">Constructor initializing with the B-Spline surface given in argument 2.  <a href="classpcl_1_1on__nurbs_1_1_fitting_cylinder.html#a5fb73d3ecb5630bec5d28b4bdaef4c51">更多...</a><br /></td></tr>
<tr class="separator:a5fb73d3ecb5630bec5d28b4bdaef4c51"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a330c7bb6d0f75574fd5eb5d0f490f4f8"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1on__nurbs_1_1_fitting_cylinder.html#a330c7bb6d0f75574fd5eb5d0f490f4f8">refine</a> (int dim)</td></tr>
<tr class="memdesc:a330c7bb6d0f75574fd5eb5d0f490f4f8"><td class="mdescLeft">&#160;</td><td class="mdescRight">Refines surface by inserting a knot in the middle of each element.  <a href="classpcl_1_1on__nurbs_1_1_fitting_cylinder.html#a330c7bb6d0f75574fd5eb5d0f490f4f8">更多...</a><br /></td></tr>
<tr class="separator:a330c7bb6d0f75574fd5eb5d0f490f4f8"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a875ad1abc31bbf7f5b30f1796002ea68"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1on__nurbs_1_1_fitting_cylinder.html#a875ad1abc31bbf7f5b30f1796002ea68">refine</a> (int dim, double param)</td></tr>
<tr class="memdesc:a875ad1abc31bbf7f5b30f1796002ea68"><td class="mdescLeft">&#160;</td><td class="mdescRight">Refines surface by inserting a knot in the middle of the element belonging to param.  <a href="classpcl_1_1on__nurbs_1_1_fitting_cylinder.html#a875ad1abc31bbf7f5b30f1796002ea68">更多...</a><br /></td></tr>
<tr class="separator:a875ad1abc31bbf7f5b30f1796002ea68"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ae0a9ea74732b760dede002e8a91814cc"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1on__nurbs_1_1_fitting_cylinder.html#ae0a9ea74732b760dede002e8a91814cc">refine</a> (int dim, unsigned span_index)</td></tr>
<tr class="memdesc:ae0a9ea74732b760dede002e8a91814cc"><td class="mdescLeft">&#160;</td><td class="mdescRight">Refines surface by inserting a knot in the middle of the element specified.  <a href="classpcl_1_1on__nurbs_1_1_fitting_cylinder.html#ae0a9ea74732b760dede002e8a91814cc">更多...</a><br /></td></tr>
<tr class="separator:ae0a9ea74732b760dede002e8a91814cc"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:af7184219108a6f46bd76e48b1fe54c9e"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1on__nurbs_1_1_fitting_cylinder.html#af7184219108a6f46bd76e48b1fe54c9e">assemble</a> (double smoothness=0.000001f)</td></tr>
<tr class="memdesc:af7184219108a6f46bd76e48b1fe54c9e"><td class="mdescLeft">&#160;</td><td class="mdescRight">Assemble the system of equations for fitting  <a href="classpcl_1_1on__nurbs_1_1_fitting_cylinder.html#af7184219108a6f46bd76e48b1fe54c9e">更多...</a><br /></td></tr>
<tr class="separator:af7184219108a6f46bd76e48b1fe54c9e"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a127b3214182f7ed8f0a6fc838d20df8a"><td class="memItemLeft" align="right" valign="top"><a id="a127b3214182f7ed8f0a6fc838d20df8a"></a>
void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1on__nurbs_1_1_fitting_cylinder.html#a127b3214182f7ed8f0a6fc838d20df8a">solve</a> (double damp=1.0)</td></tr>
<tr class="memdesc:a127b3214182f7ed8f0a6fc838d20df8a"><td class="mdescLeft">&#160;</td><td class="mdescRight">Solve system of equations using Eigen or UmfPack (can be defined in on_nurbs.cmake), and updates B-Spline surface if a solution can be obtained. <br /></td></tr>
<tr class="separator:a127b3214182f7ed8f0a6fc838d20df8a"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:acbe10ffe69f7ebe9d28659a5417c1c23"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1on__nurbs_1_1_fitting_cylinder.html#acbe10ffe69f7ebe9d28659a5417c1c23">updateSurf</a> (double damp)</td></tr>
<tr class="memdesc:acbe10ffe69f7ebe9d28659a5417c1c23"><td class="mdescLeft">&#160;</td><td class="mdescRight">Update surface according to the current system of equations.  <a href="classpcl_1_1on__nurbs_1_1_fitting_cylinder.html#acbe10ffe69f7ebe9d28659a5417c1c23">更多...</a><br /></td></tr>
<tr class="separator:acbe10ffe69f7ebe9d28659a5417c1c23"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a6f444804e7a3b0a98a51f2bafd057733"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1on__nurbs_1_1_fitting_cylinder.html#a6f444804e7a3b0a98a51f2bafd057733">setInvMapParams</a> (int in_max_steps, double invMapInt_accuracy)</td></tr>
<tr class="memdesc:a6f444804e7a3b0a98a51f2bafd057733"><td class="mdescLeft">&#160;</td><td class="mdescRight">Set parameters for inverse mapping  <a href="classpcl_1_1on__nurbs_1_1_fitting_cylinder.html#a6f444804e7a3b0a98a51f2bafd057733">更多...</a><br /></td></tr>
<tr class="separator:a6f444804e7a3b0a98a51f2bafd057733"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:acea1766f613f9d2938e71c3485e63b92"><td class="memItemLeft" align="right" valign="top"><a id="acea1766f613f9d2938e71c3485e63b92"></a>
void&#160;</td><td class="memItemRight" valign="bottom"><b>setQuiet</b> (bool val)</td></tr>
<tr class="separator:acea1766f613f9d2938e71c3485e63b92"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-static-methods"></a>
静态 Public 成员函数</h2></td></tr>
<tr class="memitem:a0c54c7be2ef1c2577dc3357bb5a25c12"><td class="memItemLeft" align="right" valign="top"><a id="a0c54c7be2ef1c2577dc3357bb5a25c12"></a>
static <a class="el" href="class_o_n___nurbs_surface.html">ON_NurbsSurface</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1on__nurbs_1_1_fitting_cylinder.html#a0c54c7be2ef1c2577dc3357bb5a25c12">initNurbsPCACylinder</a> (int order, <a class="el" href="structpcl_1_1on__nurbs_1_1_nurbs_data_surface.html">NurbsDataSurface</a> *data)</td></tr>
<tr class="memdesc:a0c54c7be2ef1c2577dc3357bb5a25c12"><td class="mdescLeft">&#160;</td><td class="mdescRight">Initializing a cylindric B-Spline surface using principal-component-analysis and eigen values <br /></td></tr>
<tr class="separator:a0c54c7be2ef1c2577dc3357bb5a25c12"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a51a86cde17cc2f6ffadda1f521882eee"><td class="memItemLeft" align="right" valign="top"><a id="a51a86cde17cc2f6ffadda1f521882eee"></a>
static <a class="el" href="class_o_n___nurbs_surface.html">ON_NurbsSurface</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1on__nurbs_1_1_fitting_cylinder.html#a51a86cde17cc2f6ffadda1f521882eee">initNurbsCylinderWithAxes</a> (int order, <a class="el" href="structpcl_1_1on__nurbs_1_1_nurbs_data_surface.html">NurbsDataSurface</a> *data, Eigen::Matrix3d &amp;axes)</td></tr>
<tr class="memdesc:a51a86cde17cc2f6ffadda1f521882eee"><td class="mdescLeft">&#160;</td><td class="mdescRight">Initializing a cylindric B-Spline surface using given axes. First axis provided becomes cylinder axis <br /></td></tr>
<tr class="separator:a51a86cde17cc2f6ffadda1f521882eee"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a43a244a1fe9594f99d02c9b387507cbe"><td class="memItemLeft" align="right" valign="top"><a id="a43a244a1fe9594f99d02c9b387507cbe"></a>
static std::vector&lt; double &gt;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1on__nurbs_1_1_fitting_cylinder.html#a43a244a1fe9594f99d02c9b387507cbe">getElementVector</a> (const <a class="el" href="class_o_n___nurbs_surface.html">ON_NurbsSurface</a> &amp;nurbs, int dim)</td></tr>
<tr class="memdesc:a43a244a1fe9594f99d02c9b387507cbe"><td class="mdescLeft">&#160;</td><td class="mdescRight">Get the elements of a cylindric B-Spline surface. <br /></td></tr>
<tr class="separator:a43a244a1fe9594f99d02c9b387507cbe"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ad76e7ddd0eff1cf417b4a384602d8fc2"><td class="memItemLeft" align="right" valign="top">static Eigen::Vector2d&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1on__nurbs_1_1_fitting_cylinder.html#ad76e7ddd0eff1cf417b4a384602d8fc2">inverseMapping</a> (const <a class="el" href="class_o_n___nurbs_surface.html">ON_NurbsSurface</a> &amp;nurbs, const Eigen::Vector3d &amp;pt, const Eigen::Vector2d &amp;hint, double &amp;error, Eigen::Vector3d &amp;p, Eigen::Vector3d &amp;tu, Eigen::Vector3d &amp;tv, int maxSteps=100, double accuracy=1e-6, bool quiet=true)</td></tr>
<tr class="memdesc:ad76e7ddd0eff1cf417b4a384602d8fc2"><td class="mdescLeft">&#160;</td><td class="mdescRight">Inverse mapping / point inversion: Given a point pt, this function finds the closest point on the B-Spline surface using Newtons method and point-distance (L2-, Euclidean norm).  <a href="classpcl_1_1on__nurbs_1_1_fitting_cylinder.html#ad76e7ddd0eff1cf417b4a384602d8fc2">更多...</a><br /></td></tr>
<tr class="separator:ad76e7ddd0eff1cf417b4a384602d8fc2"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ae6765d1bd83bffeef20de257a44ff234"><td class="memItemLeft" align="right" valign="top">static Eigen::Vector2d&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1on__nurbs_1_1_fitting_cylinder.html#ae6765d1bd83bffeef20de257a44ff234">findClosestElementMidPoint</a> (const <a class="el" href="class_o_n___nurbs_surface.html">ON_NurbsSurface</a> &amp;nurbs, const Eigen::Vector3d &amp;pt)</td></tr>
<tr class="memdesc:ae6765d1bd83bffeef20de257a44ff234"><td class="mdescLeft">&#160;</td><td class="mdescRight">Given a point pt, the function finds the closest midpoint of the elements of the surface.  <a href="classpcl_1_1on__nurbs_1_1_fitting_cylinder.html#ae6765d1bd83bffeef20de257a44ff234">更多...</a><br /></td></tr>
<tr class="separator:ae6765d1bd83bffeef20de257a44ff234"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-attribs"></a>
Public 属性</h2></td></tr>
<tr class="memitem:a4283cbf457e985ac8308bcb6dc03d8f4"><td class="memItemLeft" align="right" valign="top"><a id="a4283cbf457e985ac8308bcb6dc03d8f4"></a>
<a class="el" href="class_o_n___text_log.html">ON_TextLog</a>&#160;</td><td class="memItemRight" valign="bottom"><b>m_out</b></td></tr>
<tr class="separator:a4283cbf457e985ac8308bcb6dc03d8f4"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a6822a20b918660b1d94de115125fa97a"><td class="memItemLeft" align="right" valign="top"><a id="a6822a20b918660b1d94de115125fa97a"></a>
<a class="el" href="class_o_n___nurbs_surface.html">ON_NurbsSurface</a>&#160;</td><td class="memItemRight" valign="bottom"><b>m_nurbs</b></td></tr>
<tr class="separator:a6822a20b918660b1d94de115125fa97a"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a6c2a61a3d7e4e1c18efc1d0569d170ad"><td class="memItemLeft" align="right" valign="top"><a id="a6c2a61a3d7e4e1c18efc1d0569d170ad"></a>
<a class="el" href="structpcl_1_1on__nurbs_1_1_nurbs_data_surface.html">NurbsDataSurface</a> *&#160;</td><td class="memItemRight" valign="bottom"><b>m_data</b></td></tr>
<tr class="separator:a6c2a61a3d7e4e1c18efc1d0569d170ad"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pro-methods"></a>
Protected 成员函数</h2></td></tr>
<tr class="memitem:a8583be6558ffdad5f7caf2643cda15d3"><td class="memItemLeft" align="right" valign="top"><a id="a8583be6558ffdad5f7caf2643cda15d3"></a>
void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1on__nurbs_1_1_fitting_cylinder.html#a8583be6558ffdad5f7caf2643cda15d3">init</a> ()</td></tr>
<tr class="memdesc:a8583be6558ffdad5f7caf2643cda15d3"><td class="mdescLeft">&#160;</td><td class="mdescRight">Initialisation of member variables <br /></td></tr>
<tr class="separator:a8583be6558ffdad5f7caf2643cda15d3"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ad316ed683b639df608ea0c33f9e88ff2"><td class="memItemLeft" align="right" valign="top"><a id="ad316ed683b639df608ea0c33f9e88ff2"></a>
void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1on__nurbs_1_1_fitting_cylinder.html#ad316ed683b639df608ea0c33f9e88ff2">assembleInterior</a> (double wInt, unsigned &amp;row)</td></tr>
<tr class="memdesc:ad316ed683b639df608ea0c33f9e88ff2"><td class="mdescLeft">&#160;</td><td class="mdescRight">Assemble point-to-surface constraints for interior points. <br /></td></tr>
<tr class="separator:ad316ed683b639df608ea0c33f9e88ff2"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a144474a093954bdfba6f56035902925e"><td class="memItemLeft" align="right" valign="top"><a id="a144474a093954bdfba6f56035902925e"></a>
void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1on__nurbs_1_1_fitting_cylinder.html#a144474a093954bdfba6f56035902925e">addPointConstraint</a> (const Eigen::Vector2d &amp;params, const Eigen::Vector3d &amp;point, double weight, unsigned &amp;row)</td></tr>
<tr class="memdesc:a144474a093954bdfba6f56035902925e"><td class="mdescLeft">&#160;</td><td class="mdescRight">Add minimization constraint: point-to-surface distance (point-distance-minimization). <br /></td></tr>
<tr class="separator:a144474a093954bdfba6f56035902925e"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:adc40cb163845f1ecbff3aa5927b57e54"><td class="memItemLeft" align="right" valign="top"><a id="adc40cb163845f1ecbff3aa5927b57e54"></a>
void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1on__nurbs_1_1_fitting_cylinder.html#adc40cb163845f1ecbff3aa5927b57e54">addCageInteriorRegularisation</a> (double weight, unsigned &amp;row)</td></tr>
<tr class="memdesc:adc40cb163845f1ecbff3aa5927b57e54"><td class="mdescLeft">&#160;</td><td class="mdescRight">Add minimization constraint: interior smoothness by control point regularisation. <br /></td></tr>
<tr class="separator:adc40cb163845f1ecbff3aa5927b57e54"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a06c26dd8ff42d5e5b0872b94be12ef9f"><td class="memItemLeft" align="right" valign="top"><a id="a06c26dd8ff42d5e5b0872b94be12ef9f"></a>
void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classpcl_1_1on__nurbs_1_1_fitting_cylinder.html#a06c26dd8ff42d5e5b0872b94be12ef9f">addCageBoundaryRegularisation</a> (double weight, int side, unsigned &amp;row)</td></tr>
<tr class="memdesc:a06c26dd8ff42d5e5b0872b94be12ef9f"><td class="mdescLeft">&#160;</td><td class="mdescRight">Add minimization constraint: corner smoothness by control point regularisation. <br /></td></tr>
<tr class="separator:a06c26dd8ff42d5e5b0872b94be12ef9f"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pri-methods"></a>
Private 成员函数</h2></td></tr>
<tr class="memitem:ad54ec8ceabbca51822347cdc8e71da8b"><td class="memItemLeft" align="right" valign="top"><a id="ad54ec8ceabbca51822347cdc8e71da8b"></a>
int&#160;</td><td class="memItemRight" valign="bottom"><b>grc2gl</b> (int I, int J)</td></tr>
<tr class="separator:ad54ec8ceabbca51822347cdc8e71da8b"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:aa0a0a6a5afffae0c854748019de477bb"><td class="memItemLeft" align="right" valign="top"><a id="aa0a0a6a5afffae0c854748019de477bb"></a>
int&#160;</td><td class="memItemRight" valign="bottom"><b>lrc2gl</b> (int E, int F, int i, int j)</td></tr>
<tr class="separator:aa0a0a6a5afffae0c854748019de477bb"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:aa60222ca7f0d24e3c105ab240c6f5c4e"><td class="memItemLeft" align="right" valign="top"><a id="aa60222ca7f0d24e3c105ab240c6f5c4e"></a>
int&#160;</td><td class="memItemRight" valign="bottom"><b>gl2gr</b> (int A)</td></tr>
<tr class="separator:aa60222ca7f0d24e3c105ab240c6f5c4e"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ab64ee5f9b3794950e23d6fdbcca84c95"><td class="memItemLeft" align="right" valign="top"><a id="ab64ee5f9b3794950e23d6fdbcca84c95"></a>
int&#160;</td><td class="memItemRight" valign="bottom"><b>gl2gc</b> (int A)</td></tr>
<tr class="separator:ab64ee5f9b3794950e23d6fdbcca84c95"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pri-attribs"></a>
Private 属性</h2></td></tr>
<tr class="memitem:ac31523176a496c78027b025c645ed2ec"><td class="memItemLeft" align="right" valign="top"><a id="ac31523176a496c78027b025c645ed2ec"></a>
<a class="el" href="classpcl_1_1on__nurbs_1_1_nurbs_solve.html">NurbsSolve</a>&#160;</td><td class="memItemRight" valign="bottom"><b>m_solver</b></td></tr>
<tr class="separator:ac31523176a496c78027b025c645ed2ec"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a4ca4050be756099b5e9782fbd6b66daa"><td class="memItemLeft" align="right" valign="top"><a id="a4ca4050be756099b5e9782fbd6b66daa"></a>
bool&#160;</td><td class="memItemRight" valign="bottom"><b>m_quiet</b></td></tr>
<tr class="separator:a4ca4050be756099b5e9782fbd6b66daa"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:afd28853ff110b6f700dd2f42e0c2aad5"><td class="memItemLeft" align="right" valign="top"><a id="afd28853ff110b6f700dd2f42e0c2aad5"></a>
int&#160;</td><td class="memItemRight" valign="bottom"><b>in_max_steps</b></td></tr>
<tr class="separator:afd28853ff110b6f700dd2f42e0c2aad5"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a3693bf73c2813dd2d05d03d20984cfa2"><td class="memItemLeft" align="right" valign="top"><a id="a3693bf73c2813dd2d05d03d20984cfa2"></a>
double&#160;</td><td class="memItemRight" valign="bottom"><b>in_accuracy</b></td></tr>
<tr class="separator:a3693bf73c2813dd2d05d03d20984cfa2"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table>
<a name="details" id="details"></a><h2 class="groupheader">详细描述</h2>
<div class="textblock"><p>Fitting a cylindric (dim 0 clamped, dim 1 periodic) B-Spline surface to 3D point-clouds using point-distance-minimization Based on paper: TODO </p>
<dl class="section author"><dt>作者</dt><dd>Thomas Mörwald &lt;&gt; </dd></dl>
</div><h2 class="groupheader">构造及析构函数说明</h2>
<a id="a0691da5e90af528477c71034e768d521"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a0691da5e90af528477c71034e768d521">&#9670;&nbsp;</a></span>FittingCylinder() <span class="overload">[1/2]</span></h2>

<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">pcl::on_nurbs::FittingCylinder::FittingCylinder </td>
          <td>(</td>
          <td class="paramtype">int&#160;</td>
          <td class="paramname"><em>order</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype"><a class="el" href="structpcl_1_1on__nurbs_1_1_nurbs_data_surface.html">NurbsDataSurface</a> *&#160;</td>
          <td class="paramname"><em>data</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
</div><div class="memdoc">

<p>Constructor initializing B-Spline surface using initNurbsPCACylinder(...). </p>
<dl class="params"><dt>参数</dt><dd>
  <table class="params">
    <tr><td class="paramdir">[in]</td><td class="paramname">order</td><td>the polynomial order of the B-Spline surface. </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">data</td><td>pointer to the 2D point-cloud data to be fit. </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">z</td><td>vector defining front face of surface. <br  />
 </td></tr>
  </table>
  </dd>
</dl>

</div>
</div>
<a id="a5fb73d3ecb5630bec5d28b4bdaef4c51"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a5fb73d3ecb5630bec5d28b4bdaef4c51">&#9670;&nbsp;</a></span>FittingCylinder() <span class="overload">[2/2]</span></h2>

<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">pcl::on_nurbs::FittingCylinder::FittingCylinder </td>
          <td>(</td>
          <td class="paramtype"><a class="el" href="structpcl_1_1on__nurbs_1_1_nurbs_data_surface.html">NurbsDataSurface</a> *&#160;</td>
          <td class="paramname"><em>data</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const <a class="el" href="class_o_n___nurbs_surface.html">ON_NurbsSurface</a> &amp;&#160;</td>
          <td class="paramname"><em>ns</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
</div><div class="memdoc">

<p>Constructor initializing with the B-Spline surface given in argument 2. </p>
<dl class="params"><dt>参数</dt><dd>
  <table class="params">
    <tr><td class="paramdir">[in]</td><td class="paramname">data</td><td>pointer to the 3D point-cloud data to be fit. </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">ns</td><td>B-Spline surface used for fitting. <br  />
 </td></tr>
  </table>
  </dd>
</dl>

</div>
</div>
<h2 class="groupheader">成员函数说明</h2>
<a id="af7184219108a6f46bd76e48b1fe54c9e"></a>
<h2 class="memtitle"><span class="permalink"><a href="#af7184219108a6f46bd76e48b1fe54c9e">&#9670;&nbsp;</a></span>assemble()</h2>

<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">void pcl::on_nurbs::FittingCylinder::assemble </td>
          <td>(</td>
          <td class="paramtype">double&#160;</td>
          <td class="paramname"><em>smoothness</em> = <code>0.000001f</code></td><td>)</td>
          <td></td>
        </tr>
      </table>
</div><div class="memdoc">

<p>Assemble the system of equations for fitting </p>
<ul>
<li>for large point-clouds this is time consuming.</li>
<li>should be done once before refinement to initialize the starting points for point inversion. </li>
</ul>

</div>
</div>
<a id="ae6765d1bd83bffeef20de257a44ff234"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ae6765d1bd83bffeef20de257a44ff234">&#9670;&nbsp;</a></span>findClosestElementMidPoint()</h2>

<div class="memitem">
<div class="memproto">
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">static Eigen::Vector2d pcl::on_nurbs::FittingCylinder::findClosestElementMidPoint </td>
          <td>(</td>
          <td class="paramtype">const <a class="el" href="class_o_n___nurbs_surface.html">ON_NurbsSurface</a> &amp;&#160;</td>
          <td class="paramname"><em>nurbs</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const Eigen::Vector3d &amp;&#160;</td>
          <td class="paramname"><em>pt</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">static</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Given a point pt, the function finds the closest midpoint of the elements of the surface. </p>
<dl class="params"><dt>参数</dt><dd>
  <table class="params">
    <tr><td class="paramdir">[in]</td><td class="paramname">nurbs</td><td>the B-Spline surface. </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">pt</td><td>the point to which the closest midpoint of the elements will be computed. return closest midpoint in parametric domain. </td></tr>
  </table>
  </dd>
</dl>

</div>
</div>
<a id="ad76e7ddd0eff1cf417b4a384602d8fc2"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ad76e7ddd0eff1cf417b4a384602d8fc2">&#9670;&nbsp;</a></span>inverseMapping()</h2>

<div class="memitem">
<div class="memproto">
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">static Eigen::Vector2d pcl::on_nurbs::FittingCylinder::inverseMapping </td>
          <td>(</td>
          <td class="paramtype">const <a class="el" href="class_o_n___nurbs_surface.html">ON_NurbsSurface</a> &amp;&#160;</td>
          <td class="paramname"><em>nurbs</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const Eigen::Vector3d &amp;&#160;</td>
          <td class="paramname"><em>pt</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const Eigen::Vector2d &amp;&#160;</td>
          <td class="paramname"><em>hint</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">double &amp;&#160;</td>
          <td class="paramname"><em>error</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">Eigen::Vector3d &amp;&#160;</td>
          <td class="paramname"><em>p</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">Eigen::Vector3d &amp;&#160;</td>
          <td class="paramname"><em>tu</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">Eigen::Vector3d &amp;&#160;</td>
          <td class="paramname"><em>tv</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">int&#160;</td>
          <td class="paramname"><em>maxSteps</em> = <code>100</code>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">double&#160;</td>
          <td class="paramname"><em>accuracy</em> = <code>1e-6</code>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">bool&#160;</td>
          <td class="paramname"><em>quiet</em> = <code>true</code>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">static</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Inverse mapping / point inversion: Given a point pt, this function finds the closest point on the B-Spline surface using Newtons method and point-distance (L2-, Euclidean norm). </p>
<dl class="params"><dt>参数</dt><dd>
  <table class="params">
    <tr><td class="paramdir">[in]</td><td class="paramname">nurbs</td><td>the B-Spline surface. </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">pt</td><td>the point to which the closest point on the surface will be computed. </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">hint</td><td>the starting point in parametric domain (warning: may lead to convergence at local minima). </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">error</td><td>the distance between the point pt and p after convergence. </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">p</td><td>closest boundary point on surface. </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">tu</td><td>the tangent vector at point p in u-direction. </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">tv</td><td>the tangent vector at point p in v-direction. </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">maxSteps</td><td>maximum number of iterations. </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">accuracy</td><td>convergence criteria: if error is lower than accuracy the function returns </td></tr>
  </table>
  </dd>
</dl>
<dl class="section return"><dt>返回</dt><dd>closest point on surface in parametric domain. </dd></dl>

</div>
</div>
<a id="a330c7bb6d0f75574fd5eb5d0f490f4f8"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a330c7bb6d0f75574fd5eb5d0f490f4f8">&#9670;&nbsp;</a></span>refine() <span class="overload">[1/3]</span></h2>

<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">void pcl::on_nurbs::FittingCylinder::refine </td>
          <td>(</td>
          <td class="paramtype">int&#160;</td>
          <td class="paramname"><em>dim</em></td><td>)</td>
          <td></td>
        </tr>
      </table>
</div><div class="memdoc">

<p>Refines surface by inserting a knot in the middle of each element. </p>
<dl class="params"><dt>参数</dt><dd>
  <table class="params">
    <tr><td class="paramdir">[in]</td><td class="paramname">dim</td><td>dimension of refinement (0,1) <br  />
 </td></tr>
  </table>
  </dd>
</dl>

</div>
</div>
<a id="a875ad1abc31bbf7f5b30f1796002ea68"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a875ad1abc31bbf7f5b30f1796002ea68">&#9670;&nbsp;</a></span>refine() <span class="overload">[2/3]</span></h2>

<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">void pcl::on_nurbs::FittingCylinder::refine </td>
          <td>(</td>
          <td class="paramtype">int&#160;</td>
          <td class="paramname"><em>dim</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">double&#160;</td>
          <td class="paramname"><em>param</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
</div><div class="memdoc">

<p>Refines surface by inserting a knot in the middle of the element belonging to param. </p>
<dl class="params"><dt>参数</dt><dd>
  <table class="params">
    <tr><td class="paramdir">[in]</td><td class="paramname">dim</td><td>dimension of refinement (0,1) </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">param</td><td>parameter defining the element to be refined. </td></tr>
  </table>
  </dd>
</dl>

</div>
</div>
<a id="ae0a9ea74732b760dede002e8a91814cc"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ae0a9ea74732b760dede002e8a91814cc">&#9670;&nbsp;</a></span>refine() <span class="overload">[3/3]</span></h2>

<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">void pcl::on_nurbs::FittingCylinder::refine </td>
          <td>(</td>
          <td class="paramtype">int&#160;</td>
          <td class="paramname"><em>dim</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">unsigned&#160;</td>
          <td class="paramname"><em>span_index</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
</div><div class="memdoc">

<p>Refines surface by inserting a knot in the middle of the element specified. </p>
<dl class="params"><dt>参数</dt><dd>
  <table class="params">
    <tr><td class="paramdir">[in]</td><td class="paramname">dim</td><td>dimension of refinement (0,1) </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">span_index</td><td>the index of the element of refinement. </td></tr>
  </table>
  </dd>
</dl>

</div>
</div>
<a id="a6f444804e7a3b0a98a51f2bafd057733"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a6f444804e7a3b0a98a51f2bafd057733">&#9670;&nbsp;</a></span>setInvMapParams()</h2>

<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">void pcl::on_nurbs::FittingCylinder::setInvMapParams </td>
          <td>(</td>
          <td class="paramtype">int&#160;</td>
          <td class="paramname"><em>in_max_steps</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">double&#160;</td>
          <td class="paramname"><em>invMapInt_accuracy</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
</div><div class="memdoc">

<p>Set parameters for inverse mapping </p>
<dl class="params"><dt>参数</dt><dd>
  <table class="params">
    <tr><td class="paramdir">[in]</td><td class="paramname">in_max_steps</td><td>maximum number of iterations. </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">in_accuracy</td><td>stops iteration if specified accuracy is reached. </td></tr>
  </table>
  </dd>
</dl>

</div>
</div>
<a id="acbe10ffe69f7ebe9d28659a5417c1c23"></a>
<h2 class="memtitle"><span class="permalink"><a href="#acbe10ffe69f7ebe9d28659a5417c1c23">&#9670;&nbsp;</a></span>updateSurf()</h2>

<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">void pcl::on_nurbs::FittingCylinder::updateSurf </td>
          <td>(</td>
          <td class="paramtype">double&#160;</td>
          <td class="paramname"><em>damp</em></td><td>)</td>
          <td></td>
        </tr>
      </table>
</div><div class="memdoc">

<p>Update surface according to the current system of equations. </p>
<dl class="params"><dt>参数</dt><dd>
  <table class="params">
    <tr><td class="paramdir">[in]</td><td class="paramname">damp</td><td>damping factor from one iteration to the other. </td></tr>
  </table>
  </dd>
</dl>

</div>
</div>
<hr/>该类的文档由以下文件生成:<ul>
<li>surface/include/pcl/surface/on_nurbs/<a class="el" href="fitting__cylinder__pdm_8h_source.html">fitting_cylinder_pdm.h</a></li>
</ul>
</div><!-- contents -->
</div><!-- doc-content -->
<!-- start footer part -->
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
  <ul>
    <li class="navelem"><b>pcl</b></li><li class="navelem"><b>on_nurbs</b></li><li class="navelem"><a class="el" href="classpcl_1_1on__nurbs_1_1_fitting_cylinder.html">FittingCylinder</a></li>
    <li class="footer">制作者 <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.1 </li>
  </ul>
</div>
</body>
</html>
